import * as fs from "fs";
// import { getStat, getCurrentDirPath, isExistPath } from "../utils/fs";
// import { success, fail, ProxyMode } from "../utils/base";

export default defineEventHandler(async (event) => {
  // 获取请求参数 get
  const body = getQuery(event);
  console.log("获取请求参数：", body);
  const { filePath, filePathRoot } = getCurrentDirPath(
    "/public/log",
    "watch-log.json"
  );
  const saveFilePath = filePathRoot || filePath;
  // 获取单例
  const instance = ProxyMode();
  // 防止并发过大
  try {
    instance.asyncNums++;
    if (instance.asyncNums > 1) {
      return success(`服务器繁忙${instance.asyncNums}`);
    }
  } catch (error) {
    console.log("服务端并发过大,已拦截", error);
  }

  // 操作数据
  let isHas = await isExistPath(saveFilePath);
  /********* 文件保存出错的时候:需要删除文件 *******/
  if (body.errorId === "all_zhj") {
    try {
      const isExist = await isExistPath(saveFilePath!);
      if (isExist) {
        fs.unlinkSync(saveFilePath!);
        return success("删除文件成功");
      }
    } catch (error: any) {
      return fail(`删除成功文件失败${error.message}`);
    }
  }
  /********* 文件保存出错的时候:需要删除文件 end *******/
  if (isHas) {
    // 1. 文件大小是否达到最大 (由于这么写只能触发一次,且限制条数就足够了)所以注释
    // if (!instance.isSizeMax) {
    // getStat(saveFilePath!).then((stat: any) => {
    //   // 服务器pm2 配置,分配给 nuxt 内存400M大小,这里尽量避免超过 300
    //   if (stat.size > 0) {
    //     instance.isSizeMax = stat.size / 1024 / 1024 + 1 > 300;
    //   }
    // });
    // }
    // 2. 读取现有的 JSON 文件
    const jsonString = fs.readFileSync(saveFilePath!, "utf8");
    const fileData = JSON.parse(jsonString);
    // 是否删除之前的记录,只保留最新的 xx 条
    if (body.errorId) {
      try {
        fileData.list = fileData.list.filter(
          (e: any) => e.data.errorId != body.errorId
        );
        // 将更新后的对象写回文件
        const newJsonString = JSON.stringify(fileData, null, 2);
        fs.writeFileSync(saveFilePath!, newJsonString, "utf8");
        return success("删除成功");
      } catch (error) {
        return fail({ msg: "删除失败", error });
      }
    } else {
      return fail("请传入参数errorId");
    }
  }
  // 不存在
  else {
    return fail("没有数据可以删除,目录不存在");
  }
});
